package pe.edu.upc.jaxws.dao;


import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;
import pe.edu.upc.jaxws.model.Ubicacion;

@Repository
public class UbicacionDaoJdbc extends SimpleJdbcDaoSupport implements UbicacionDao {	

	@Autowired
	public  UbicacionDaoJdbc(DataSource dataSource) {
		setDataSource(dataSource);
	} 
		 
	public Ubicacion getUbicacionPorPlaca(String Placa) {
		try {
		return getSimpleJdbcTemplate().queryForObject("SELECT PLACA, AUTOGENERADO,  LONGITUD, LATITUD, FECHA_REGISTRO, STATUS FROM UBICACION WHERE PLACA = ? AND AUTOGENERADO = (SELECT Max(u.AUTOGENERADO)FROM ubicacion u WHERE u.Placa = Placa) ",
				new BeanPropertyRowMapper<Ubicacion>(Ubicacion.class),Placa);	
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}
	
	public void registraUbicacion(Ubicacion ubicacion){
		ubicacion.setAutogenerado(this.dameAutogenerado(ubicacion));
		
		System.out.println(this.dameAutogenerado(ubicacion));
		System.out.println(ubicacion.getPlaca());
		
		String sql = "insert into UBICACION(PLACA,AUTOGENERADO, LONGITUD , LATITUD, FECHA_REGISTRO,STATUS) values (?, ?, ?, ?, ?,?)";
		getJdbcTemplate().update(sql, ubicacion.getPlaca(), ubicacion.getAutogenerado(), ubicacion.getLongitud(),ubicacion.getLatitud(), ubicacion.getFechaRegistro(), ubicacion.getStatus());					
	}
	
	public String dameAutogenerado(Ubicacion ubicacion) {
		String auto;
		String nuevo_auto;
		String sql = "SELECT MAX(U.AUTOGENERADO) FROM UBICACION U WHERE PLACA ='" + ubicacion.getPlaca()+ "'";
		auto = getJdbcTemplate().queryForObject(sql, String.class);
		
		if (auto == null)auto="0";
		
		nuevo_auto = Integer.toString(Integer.parseInt(auto.trim()) + 1);
		
		int tam = 0,diff = 0;
		if(nuevo_auto.length() < 4){
			tam = nuevo_auto.length();	
			diff = 4-tam;
			while(diff>0){
				nuevo_auto = "0"+nuevo_auto ;
				diff--;
			}
			
		}		
		
		return nuevo_auto;
	}		


}
